/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package quienesquien;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    public Statement s; //Esto se usa para las peticiones Mysql

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");

            if (s==null){
            try {
                s = crearStatement();
            } catch (SQLException ex) {
                Logger.getLogger(GameServlet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(GameServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        String opcion = request.getParameter("opcion");
        String address;
        ErrorText DebugInfo = new ErrorText();


        if (((String) request.getHeader("User-Agent")).indexOf("MSIE") != -1) {
            
            address = "/WEB-INF/browser.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);

            return;
        }



        DebugInfo.setmsg("Sesion ID: " + session.getId());
        DebugInfo.setmsg(DebugInfo.getMsg() + "<br>Creacion : " + session.getCreationTime());
        DebugInfo.setmsg(DebugInfo.getMsg() + "<br>Last : " + session.getLastAccessedTime());
        session.setAttribute("DebugInfo", DebugInfo);

        if (opcion == null) {
            //Comprobar sesion, si no tiene sesion pasa al login, si tiene va a la pagina principal 
            //    if (session == null) {
            address = "/WEB-INF/login.jsp";
            //    }else {
            //  address = "/quienesquien.menu";
            //  }
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
        } else if (opcion.equals("1")) {
            //Pretende crear una cuenta nueva, se le redirige a la pagina de registro
            address = "/WEB-INF/registro0.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
        } else if (opcion.equals("2")) {
            //Opcion 2, se conulta en la base datos por uXXXXX y se crea un bean con los datos(nombre,apellido, foto)

            String consulta = "SELECT id, uid, nm, sn  FROM personas WHERE uid = '" + request.getParameter("uid") + "'";
            ResultSet res;
            User usuario = null;
            // out.println("DEBUG<br>");
            //    out.println(consulta);
            try {
                res = s.executeQuery(consulta);
                res.next(); //Nos colocamos en la primera posicion del resultado
                //       out.println("--"+res.getString(1)+"--"+res.getString(2)+"---"+res.getString(3)+"---"+res.getString(4));

                usuario = new User();
                usuario.setid(res.getInt("id"));
                usuario.setuid(res.getString("uid"));
                usuario.setsn(res.getString("sn"));
                usuario.setnm(res.getString("nm"));
                usuario.setnick("");
                usuario.setpasswd("");


            } catch (SQLException ex) {
                out.println(ex.getMessage() + "<br>" + ex.getLocalizedMessage() + "<br>" + ex.getSQLState() + "<br>" + ex.getErrorCode());
                Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
            //out.println("<br>Fuera del try");

            session.setAttribute("Login", usuario);

            address = "/WEB-INF/registro1.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
        } else if (opcion.equals("3")) {
            // Se guardan los valores de nombre y apellido(foto TODO), y se pasa a la pantalla de nick/passwd
            //TODO
            User usuario = (User) session.getAttribute("Login");
            usuario.setnm((String) request.getParameter("nombre"));
            usuario.setsn((String) request.getParameter("apellido"));
            //session.setAttribute("Login", usuario);

            address = "/WEB-INF/registro2.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
        } else if (opcion.equals("4")) {

            //Se inserta los datos de la persona en la base de datos, se crea el grupo y se devuelve al login form
            //TODO
            User usuario = (User) session.getAttribute("Login");
            usuario.setnick((String) request.getParameter("nick"));
            usuario.setpasswd((String) request.getParameter("password"));

            String consulta = "INSERT INTO usuarios (nick ,passwd ,uid ,nombre ,apellidos,id_grupo) VALUES ('";
            consulta += usuario.getnick() + "', MD5( '" + usuario.getpasswd() + "' ) , '";
            consulta += usuario.getuid() + "', '" + usuario.getnm() + "', '" + usuario.getsn() + "',100)";
            /*  out.println("DEBUG<br>");
            out.println("<br>" + consulta);*/
            try {
                s.executeUpdate(consulta);
                address = "/WEB-INF/login.jsp";

                RequestDispatcher dispatcher = request.getRequestDispatcher(address);
                dispatcher.forward(request, response);
            } catch (SQLException ex) {
                out.println(ex.getMessage() + "<br>" + ex.getLocalizedMessage() + "<br>" + ex.getSQLState() + "<br>" + ex.getErrorCode());
                Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
            }


        } else if (opcion.equals("5")) {
            //El usuario se intenta registrar, cmprobar si los datos son correctos
        /*    String user = request.getParameter("user");
            String password = request.getParameter("password");
            //Consulta Mysql a usar:
            String consulta = "SELECT id FROM usuarios WHERE nick = '" + request.getParameter("user") + "' AND passwd = MD5( '" + request.getParameter("passwd") + "' )";
            ResultSet res;
            try {
            res = s.executeQuery(consulta);
            if (!res.next()) {
            //El usuario/password es incorrecto
            address = "/WEB-INF/login.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
            } else {
            address = "/game.html?opcion=99";
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
            }
            } catch (SQLException ex) {
            out.println(ex.getMessage() + "<br>" + ex.getLocalizedMessage() + "<br>" + ex.getSQLState() + "<br>" + ex.getErrorCode());
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
            }*/

            //si es correcta crear una sesion, sino devolverle a login.jsp
        }

    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    public void init() {
        try {
            try {
                this.s = crearStatement();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public Statement crearStatement() throws SQLException, ClassNotFoundException {
        //Comprobamos que tenemos el driver de java mysql
        Class.forName("com.mysql.jdbc.Driver");
        // Establecemos la conexion con la base de datos.
        Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/quien_es_quien", "quien_es_quien", "quien_es_quien");
        // Preparamos la consulta
        return conexion.createStatement();
    }

    //Inserta las peticiones en la base de datos
    public boolean insertaPeticion(Statement s, String consulta) throws Exception {
        s.executeUpdate(consulta);
        return true;
    }
}